package com.itdl.lock.anno;

import com.itdl.lock.enums.LockType;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

import static com.itdl.lock.enums.LockType.REENTRANT_LOCK;

/**
 * 自定义Redis分布式锁
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RedisLock {

    /**分布式锁的名称，支持el表达式*/
    String lockName() default "";

    /**锁类型 默认为可重入锁*/
    LockType lockType() default REENTRANT_LOCK;

    /**获取锁等待时间，默认60秒*/
    long waitTime() default 30000L;

    /** 锁自动释放时间，默认60秒*/
    long leaseTime() default 60000L;

    /**
     * 被加锁方法执行完是否立即释放锁
     */
    boolean immediatelyUnLock() default true;

    /** 时间单位, 默认毫秒*/
    TimeUnit timeUnit() default TimeUnit.MILLISECONDS;
}
